﻿/*
Nombre:                         IGenericoDao
Descripcion:                    Principal interfaz que conecta la implementacion de distintas tecnologias de ORM hacia el modelo de negocios
                                de la aplicacion
Dependencias:                 
Fecha de creación:              20080904
Autor:                          VMORALES
Fecha de modifcación:         
Responsable:                  
Num. de modifcación:            0
*/

#region Imports

#endregion

using System;
namespace Electrocucaracha.AdminPersonal.DAO
{
    /// <summary>
    /// Principal interfaz que conecta la implementacion de distintas tecnologias de ORM hacia el modelo de negocios de la aplicacion
    /// </summary>
    /// <typeparam name="T">Entidad definida por la implementacion de la interfaz</typeparam>
    public interface IGenericoDao<T>
    {
        /// <summary>
        /// Funcion que permite agregar una entidad a la capa de persistencia
        /// </summary>
        /// <remarks>
        /// En caso de ser entidad pertenecientes a un catalogo sera agregada como activa
        /// </remarks>
        /// <param name="entidad">Entidad a ser agregada en la capa de persistencia</param>
        /// <returns>Verdadero en caso de su correcta aserción</returns>
        bool Agregar(ref T entidad);

        /// <summary>
        /// Funcion que permite agregar un conjunto de entidades a la capa de persistencia
        /// </summary>
        /// <remarks>
        /// En caso de ser entidades pertenecientes a un catalogo seran agregadas como activas
        /// </remarks>
        /// <param name="entidades">Conjunto de entidades a ser agregados en la capa de persistencia</param>
        /// <returns>Indice actual de la ultima entidad agregada</returns>
        int Agregar(ref T[] entidades);

        /// <summary>
        /// Funcion que permite eliminar una entidad especifica de la capa de persistencia
        /// </summary>
        /// <param name="entidad">Entidad a ser eliminada de la capa de persistencia</param>
        /// <returns>Verdadero en caso de su correcta eliminacion</returns>
        bool Eliminar(T entidad);

        /// <summary>
        /// Funcion que permite eliminar un conjunto de entidades de la capa de persistencia
        /// </summary>
        /// <param name="entidades">Conjunto de entidades a ser eliminadas de la capa de persistencia</param>
        /// <returns>Indice actual de la ultima entidad eliminada</returns>
        int Eliminar(T[] entidades);

        /// <summary>
        /// Funcion que busca una entidad a partir de su identificador
        /// </summary>
        /// <param name="id">Identificador de la entidad a ser buscada</param>
        /// <returns>La entidad solicitada o nulo en caso de no encontrarse</returns>
        T Obtener(int id);

        /// <summary>
        /// Funcion que obtiene todas las entidades registradas en la capa de persistencia
        /// </summary>
        /// <returns>Conjunto de entidades</returns>
        T[] Obtener();

        /// <summary>
        /// Funcion que actualiza sobre la capa de persistencia una entidad especifica
        /// </summary>
        /// <param name="entidad">Entidad a sobrescribir datos de la entidad ubicada en la capa de persistencia</param>
        /// <returns>Verdadero en caso de su correcta actualizacion</returns>
        bool Actualizar(T entidad);

        /// <summary>
        /// Funcion que actualiza sobre la capa de persistencia un conjunto de entidades
        /// </summary>
        /// <param name="entidades">Conjunto de entidades a sobreescribir los datos de las entidades ubicados en la capa de persistencia</param>
        /// <returns>Indice actual de la ultima entidad actualizada</returns>
        int Actualizar(T[] entidades);

        /// <summary>
        /// Funcion que determina si una entidad en especifio existe en la capa de persistencia
        /// </summary>
        /// <param name="entidad">Entidad a ser buscada en la capa de persistencia</param>
        /// <returns>Verdadero en caso de que la entidad exista en la capa de persistencia, falso en caso contrario</returns>
        bool Existe(T entidad);

        /// <summary>
        /// Funcion que devuelve la cantidad de entidades registradas en la capa de persistencia
        /// </summary>
        /// <returns>Cantidad de entidades registradas</returns>
        int ObtenerCantidad();

        /// <summary>
        /// Funcion que reinicia el identificador a cero
        /// </summary>
        void ResetearId();

        /// <summary>
        /// Funcion que valida que los datos de la entidad sean correctos
        /// </summary>
        /// <param name="entidad">Entidad a ser validada</param>
        /// <param name="validacion">Campo que indica los valores que seran validados</param>
        void Validar(T entidad, Validaciones validacion);

        /// <summary>
        /// Funcion que valida que los datos de un conjunto de entidades sean validos
        /// </summary>
        /// <param name="entidades">Entidades a ser validadas</param>
        /// <param name="validacion">Campo que indica los valores que seran validados</param>
        void Validar(T[] entidades, Validaciones validacion);

    }//IGenericoDao
}//Electrocucaracha.AdminPersonal.DAO
